
let module = ( function() {

	let moduleList = {} // 模块存储容器， 闭包保存数据
	/**
	 * name 模块名
	 * modules 当前模块所依赖的模块 
	 * action 当前模块(是一个函数，函数作用域)， 运行时加载机制
	 */
	function define(name, modules, action) {

		// 将依赖模块(modules)对应的名称， 映射为具体的模块对象
		let dependModuels = modules.map((m, i) => {
			modules[i] = moduleList[m]
			return moduleList[m]
		})
		// 函数运行， 函数的返回值，就为当前模块的模块对象
		moduleList[name] = action.apply(null, modules)
	}
	// 通过define 定义模块
	return {define}
})();


module.define('hd', [], function(modules) {
	return {
		name : 'hd name',
		show() {
			console.log('hd show ' + this.name)
		},
		greeting(name) {
			console.log('hd greeting ' + name)
		}
	}
})

var modules = ['hd']
module.define('aa', modules, function(hd) {
	hd.show()
	return {
		name: 'aa',
		sayHello() {
			return 'hello ' + this.name
		}
	}
})

console.log(modules)



